package 我的JDK基础数据结构.ArrayDeque;

import java.util.ArrayList;
import java.util.List;

public class Test {

    public Test(String name) {
        this.name = name;
    }

    public String name;

    /**
     * 原码:普通的 010101  然后最高位1为- 0为+
     * 反码:与原码相同 负数就除了符号位其他都取反
     * 补码:与原码相同 负数就反码+1
     * 计算机中负数都用补码表示
     * 这样做便于加减
     * 原码: 7: 0000 0111  -5: 1000 0101
     * 反码: 7: 0000 0111  -5: 1111 1010
     * 补码: 7: 0000 0111  -5: 1111 1011
     *
     * 7+(-5)  7的补码+(-5)的补码= 0000 0010 (得到的还是补码,最高位为0 正数的补码) 则为 10->2 正确
     *
     * 原码: 6: 0000 0110  -2: 1000 0010
     * 反码: 6: 0000 0110  -2: 1111 1101
     * 补码: 6: 0000 0110  -2: 1111 1110
     *
     * 6+(-2)= 0000 0110 + 1111 1110 =  00000100 为4 正确
     *
     * 两个二进制数相加减就是补码相加减;并且Java中所有数据的二进制表示方式都是以补码形式;
     * 反码将符号也取反了
     * >>高位的空位补符号位,即正数高空位补0,负数高空位补1。
     * >>>高位的空位都补0。
     */

    public static void main(String[] args) {
        //int 4字节 32位
        //负数用补码表示
        List<Test> list=new ArrayList<>();
        list.add(new Test("111"));
        list.add(new Test("222"));
        ArrayDeque<Test> arrayDeque=new ArrayDeque<>(list);
        Object[] objects = arrayDeque.toArray();
        list.get(0).name="修改后";
        System.out.println(((Test)objects[0]).name);
    }

}
